/*
 * ProdutoForm.java
 *
 * Created on 05/01/2010, 23:02:57
 */
package loja.gui;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import loja.dao.CategoriaDao;
import loja.dao.MarcaDao;
import loja.dao.ProdutoDao;
import loja.dao.exceptions.BuscaException;
import loja.gui.utils.EstadoInterface;
import loja.gui.utils.MessageUtil;
import loja.gui.tablemodel.ProdutoTableModel;
import loja.validacao.ProdutoValidador;
import loja.validacao.Validador;
import loja.dominio.Categoria;
import loja.dominio.Marca;
import loja.dominio.Produto;

/**
 *
 * @author Rodrigo
 */
public class ProdutoForm extends JFrame {

    private EstadoInterface inicial;
    private EstadoInterface emAdicao;
    private EstadoInterface emEdicao;
    private EstadoInterface emPesquisa;
    private Produto produto;
    private ProdutoDao produtoDao;
    private ProdutoTableModel model;
    private List<Produto> cadProdutos;
    private Marca[] marcas;
    private Categoria[] categorias;

    public ProdutoForm() {
        try {
            model = new ProdutoTableModel();
            produtoDao = new ProdutoDao();

            initMarcas();
            initCategorias();
            initComponents();
            initEstados();
            inicial.mudaParaEstado();
            model.limpar();
        } catch (Exception ex) {
            MessageUtil.errorMessage(this, ex.getMessage());
        }

    }

    private void initMarcas() throws SQLException {
        try {
            MarcaDao dao = new MarcaDao();
            List<Marca> listaMarcas = dao.buscarTodos();
            marcas = listaMarcas.toArray(new Marca[listaMarcas.size()]);
        } catch (BuscaException ex) {
            Logger.getLogger(ProdutoForm.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void initCategorias() throws SQLException {
        try {
            CategoriaDao dao = new CategoriaDao();
            List<Categoria> listaCategorias = dao.buscarTodos();
            categorias = listaCategorias.toArray(new Categoria[listaCategorias.size()]);
        } catch (BuscaException ex) {
            Logger.getLogger(ProdutoForm.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void initEstados() {
        inicial = new EstadoInterface();
        emAdicao = new EstadoInterface();
        emEdicao = new EstadoInterface();
        emPesquisa = new EstadoInterface();

        //Estado inicial
        //habilitados
        inicial.adicionaHabilitado(txtPesquisar);
        inicial.adicionaHabilitado(btnPesquisar);
        inicial.adicionaHabilitado(btnNovo);
        inicial.adicionaHabilitado(btnSair);

        //desabilitados
        inicial.adicionaDesabilitado(btnCancelar);
        inicial.adicionaDesabilitado(btnExcluir);
        inicial.adicionaDesabilitado(btnSalvar);
        inicial.adicionaDesabilitado(cmbCategoria);
        inicial.adicionaDesabilitado(cmbMarca);
        inicial.adicionaDesabilitado(txtId);
        inicial.adicionaDesabilitado(txtProduto);
        inicial.adicionaDesabilitado(txtPreco);
        inicial.adicionaDesabilitado(tabelaProdutos);

        //semtexto
        inicial.adicionarSemTexto(txtId);
        inicial.adicionarSemTexto(txtProduto);
        inicial.adicionarSemTexto(txtPreco);

        //Estado em adição
        //habilitados
        emAdicao.adicionaHabilitado(cmbCategoria);
        emAdicao.adicionaHabilitado(cmbMarca);
        emAdicao.adicionaHabilitado(btnSalvar);
        emAdicao.adicionaHabilitado(btnSair);
        emAdicao.adicionaHabilitado(btnCancelar);
        emAdicao.adicionaHabilitado(txtProduto);
        emAdicao.adicionaHabilitado(txtPreco);

        //desabilitados
        emAdicao.adicionaDesabilitado(btnNovo);
        emAdicao.adicionaDesabilitado(btnExcluir);
        emAdicao.adicionaDesabilitado(btnPesquisar);
        emAdicao.adicionaDesabilitado(txtPesquisar);
        emAdicao.adicionaDesabilitado(txtId);
        emAdicao.adicionaDesabilitado(tabelaProdutos);

        //semtexto
        emAdicao.adicionarSemTexto(txtId);
        emAdicao.adicionarSemTexto(txtProduto);
        emAdicao.adicionarSemTexto(txtPreco);

        //estado em edição
        //habilitados      
        emEdicao.adicionaHabilitado(btnCancelar);
        emEdicao.adicionaHabilitado(btnExcluir);
        emEdicao.adicionaHabilitado(cmbCategoria);
        emEdicao.adicionaHabilitado(cmbMarca);
        emEdicao.adicionaHabilitado(btnSair);
        emEdicao.adicionaHabilitado(txtProduto);
        emEdicao.adicionaHabilitado(txtPreco);
        emEdicao.adicionaHabilitado(btnSalvar);
        emEdicao.adicionaHabilitado(btnPesquisar);

        //desabilitados
        emEdicao.adicionaDesabilitado(btnNovo);
        emEdicao.adicionaDesabilitado(txtPesquisar);
        emEdicao.adicionaDesabilitado(btnPesquisar);
        emEdicao.adicionaDesabilitado(txtId);

        //estado em pesquisa
        //habilitados
        emPesquisa.adicionaHabilitado(txtPesquisar);
        emPesquisa.adicionaHabilitado(btnPesquisar);
        emPesquisa.adicionaHabilitado(btnNovo);
        emPesquisa.adicionaHabilitado(btnSair);
        emPesquisa.adicionaHabilitado(btnCancelar);
        emPesquisa.adicionaHabilitado(tabelaProdutos);

        //desabilitados
        emPesquisa.adicionaDesabilitado(btnExcluir);
        emPesquisa.adicionaDesabilitado(btnSalvar);
        emPesquisa.adicionaDesabilitado(cmbCategoria);
        emPesquisa.adicionaDesabilitado(cmbMarca);
        emPesquisa.adicionaDesabilitado(txtId);
        emPesquisa.adicionaDesabilitado(txtProduto);
        emPesquisa.adicionaDesabilitado(txtPreco);

        //semtexto
        emPesquisa.adicionarSemTexto(txtId);
        emPesquisa.adicionarSemTexto(txtProduto);
        emPesquisa.adicionarSemTexto(txtPreco);
    }

    private void resetaEstados() {
        inicial.reset();
        emAdicao.reset();
        emEdicao.reset();
        emPesquisa.reset();
    }

    private void preencherProdutoComCampos() {
        produto.setDescricao(txtProduto.getText());
        produto.setPreco(Double.parseDouble(txtPreco.getText()));
        produto.setMarca((Marca) cmbMarca.getSelectedItem());
        produto.setCategoria((Categoria) cmbCategoria.getSelectedItem());
    }

    private void preencheCamposComProduto() {
        txtId.setText("" + produto.getId());
        txtProduto.setText("" + produto.getDescricao());
        txtPreco.setText("" + produto.getPreco());
        cmbMarca.setSelectedIndex(buscaMarca(produto.getMarca().getId()));
        cmbCategoria.setSelectedIndex(buscaCategoria(produto.getCategoria().getId()));
    }

    private Map getMapaDeAtributos() {
        Map map = new HashMap();
        map.put("descricao", txtProduto.getText());
        map.put("preco", txtPreco.getText());

        return map;
    }

    private void listarProduto() throws SQLException, BuscaException {

        ProdutoDao dao = new ProdutoDao();
        cadProdutos = dao.buscarPorDescricao(txtPesquisar.getText());
        model.setCadProdutos(cadProdutos);

    }

    private int buscaMarca(long idMarca) {
        for (int i = 0; i < marcas.length; i++) {
            Marca cadMarca = marcas[i];
            if (idMarca == cadMarca.getId()) {
                return i;
            }
        }
        return -1;
    }

    private int buscaCategoria(long idCategoria) {
        for (int i = 0; i < categorias.length; i++) {
            Categoria categoria = categorias[i];
            if (idCategoria == categoria.getId()) {
                return i;
            }
        }
        return -1;
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        painelPesquisa = new javax.swing.JPanel();
        btnPesquisar = new javax.swing.JButton();
        txtPesquisar = new javax.swing.JTextField();
        painelBotoes = new javax.swing.JPanel();
        btnNovo = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();
        painelProduto = new javax.swing.JPanel();
        lblId = new javax.swing.JLabel();
        lblProduto = new javax.swing.JLabel();
        lblMarca = new javax.swing.JLabel();
        lblCategoria = new javax.swing.JLabel();
        lblPreco = new javax.swing.JLabel();
        txtId = new javax.swing.JTextField();
        txtProduto = new javax.swing.JTextField();
        txtPreco = new javax.swing.JTextField();
        cmbMarca = new javax.swing.JComboBox();
        cmbCategoria = new javax.swing.JComboBox();
        scrTabela = new javax.swing.JScrollPane();
        tabelaProdutos = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Cadastro de Produtos");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setName("Produto"); // NOI18N

        painelPesquisa.setBorder(javax.swing.BorderFactory.createTitledBorder("Pequisar Produto"));
        painelPesquisa.setName("painelPesquisa"); // NOI18N

        btnPesquisar.setText("Pesquisar");
        btnPesquisar.setName("btnPesquisar"); // NOI18N
        btnPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPesquisarActionPerformed(evt);
            }
        });

        txtPesquisar.setName("txtPesquisar"); // NOI18N

        javax.swing.GroupLayout painelPesquisaLayout = new javax.swing.GroupLayout(painelPesquisa);
        painelPesquisa.setLayout(painelPesquisaLayout);
        painelPesquisaLayout.setHorizontalGroup(
            painelPesquisaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelPesquisaLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(txtPesquisar, javax.swing.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnPesquisar)
                .addContainerGap())
        );
        painelPesquisaLayout.setVerticalGroup(
            painelPesquisaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelPesquisaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(txtPesquisar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(btnPesquisar))
        );

        painelBotoes.setBorder(javax.swing.BorderFactory.createCompoundBorder());
        painelBotoes.setName("painelBotoes"); // NOI18N
        painelBotoes.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 5));

        btnNovo.setText("Novo");
        btnNovo.setName("btnNovo"); // NOI18N
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });
        painelBotoes.add(btnNovo);

        btnCancelar.setText("Cancelar");
        btnCancelar.setName("btnCancelar"); // NOI18N
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        painelBotoes.add(btnCancelar);

        btnExcluir.setText("Excluir");
        btnExcluir.setName("btnExcluir"); // NOI18N
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });
        painelBotoes.add(btnExcluir);

        btnSalvar.setText("Salvar");
        btnSalvar.setName("btnSalvar"); // NOI18N
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });
        painelBotoes.add(btnSalvar);

        btnSair.setText("Sair");
        btnSair.setName("btnSair"); // NOI18N
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });
        painelBotoes.add(btnSair);

        painelProduto.setBorder(javax.swing.BorderFactory.createTitledBorder("Cadastro de Produtos "));
        painelProduto.setName("painelProduto"); // NOI18N

        lblId.setText("Codigo do Produto:");
        lblId.setName("lblId"); // NOI18N

        lblProduto.setText("Descrição do Produto:");
        lblProduto.setName("lblProduto"); // NOI18N

        lblMarca.setText("Marca:");
        lblMarca.setName("lblMarca"); // NOI18N

        lblCategoria.setText("Categoria:");
        lblCategoria.setName("lblCategoria"); // NOI18N

        lblPreco.setText("Preço:");
        lblPreco.setName("lblPreco"); // NOI18N

        txtId.setName("txtId"); // NOI18N

        txtProduto.setName("txtProduto"); // NOI18N

        txtPreco.setName("txtPreco"); // NOI18N

        cmbMarca.setModel(new DefaultComboBoxModel(marcas));
        cmbMarca.setName("cmbMarca"); // NOI18N

        cmbCategoria.setModel(new DefaultComboBoxModel(categorias));
        cmbCategoria.setName("cmbCategoria"); // NOI18N

        javax.swing.GroupLayout painelProdutoLayout = new javax.swing.GroupLayout(painelProduto);
        painelProduto.setLayout(painelProdutoLayout);
        painelProdutoLayout.setHorizontalGroup(
            painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelProdutoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblProduto)
                    .addComponent(lblId)
                    .addComponent(lblPreco)
                    .addComponent(lblCategoria)
                    .addComponent(lblMarca))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtPreco, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
                    .addComponent(cmbCategoria, 0, 444, Short.MAX_VALUE)
                    .addComponent(cmbMarca, 0, 444, Short.MAX_VALUE)
                    .addComponent(txtId, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
                    .addComponent(txtProduto, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE))
                .addContainerGap())
        );
        painelProdutoLayout.setVerticalGroup(
            painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelProdutoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblId)
                    .addComponent(txtId, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblProduto)
                    .addComponent(txtProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblMarca)
                    .addComponent(cmbMarca, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCategoria)
                    .addComponent(cmbCategoria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(painelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPreco)
                    .addComponent(txtPreco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(16, Short.MAX_VALUE))
        );

        scrTabela.setName("scrTabela"); // NOI18N

        tabelaProdutos.setModel(model);
        tabelaProdutos.setName("tabelaProdutos"); // NOI18N
        tabelaProdutos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaProdutosMouseClicked(evt);
            }
        });
        scrTabela.setViewportView(tabelaProdutos);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(painelPesquisa, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(painelProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(painelBotoes, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE)
                    .addComponent(scrTabela, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(painelPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(painelProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(painelBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(scrTabela, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
                .addContainerGap())
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-624)/2, (screenSize.height-521)/2, 624, 521);
    }// </editor-fold>//GEN-END:initComponents

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed
        produto = new Produto();
        resetaEstados();
        emAdicao.mudaParaEstado();
    }//GEN-LAST:event_btnNovoActionPerformed

    private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPesquisarActionPerformed
        try {
            listarProduto();
            resetaEstados();
            emPesquisa.mudaParaEstado();
        } catch (BuscaException ex) {
            Logger.getLogger(ProdutoForm.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException e) {
            MessageUtil.errorMessage(this, "Ocorreu um erro ao pesquisar");
        }
    }//GEN-LAST:event_btnPesquisarActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
        Validador validador = new ProdutoValidador();

        try {
            if (validador.validar(getMapaDeAtributos())) {
                preencherProdutoComCampos();
                if (emAdicao.isEstadoAtual()) {
                    produtoDao.criar(produto);
                } else if (emEdicao.isEstadoAtual()) {
                    produtoDao.atualizar(produto);
                }
                resetaEstados();
                inicial.mudaParaEstado();
                model.limpar();
            } else {
                StringBuilder sb = new StringBuilder("Foram encontrados os seguintes erros:");

                List<String> erros = validador.getErros();
                for (String erro : erros) {
                    sb.append("\n - " + erro);
                }
                MessageUtil.errorMessage(this, sb.toString());
            }
        } catch (Exception ex) {
            MessageUtil.errorMessage(this, "Ocorreu um erro ao salvar o produto: " + ex.getMessage());
        }
    }//GEN-LAST:event_btnSalvarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        try {
            int resposta = JOptionPane.showConfirmDialog(this, "Deseja realmente excluir este Produto?",
                    "Confirmação", JOptionPane.YES_NO_OPTION);

            if (resposta == JOptionPane.YES_NO_OPTION) {
                produtoDao.deletar(produto);
                listarProduto();
                resetaEstados();
                inicial.mudaParaEstado();
                model.limpar();
            }
        } catch (Exception ex) {
            MessageUtil.errorMessage(this, "Ocorreu um erro ao excluir o produto: " + ex.getMessage());
        }
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnSairActionPerformed

    private void tabelaProdutosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaProdutosMouseClicked
        int linha = tabelaProdutos.getSelectedRow();

        if (linha != -1) {
            produto = model.getProduto(linha);
            preencheCamposComProduto();
            resetaEstados();
            emEdicao.mudaParaEstado();
        }
    }//GEN-LAST:event_tabelaProdutosMouseClicked

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        resetaEstados();
        inicial.mudaParaEstado();
        model.limpar();
    }//GEN-LAST:event_btnCancelarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnPesquisar;
    private javax.swing.JButton btnSair;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JComboBox cmbCategoria;
    private javax.swing.JComboBox cmbMarca;
    private javax.swing.JLabel lblCategoria;
    private javax.swing.JLabel lblId;
    private javax.swing.JLabel lblMarca;
    private javax.swing.JLabel lblPreco;
    private javax.swing.JLabel lblProduto;
    private javax.swing.JPanel painelBotoes;
    private javax.swing.JPanel painelPesquisa;
    private javax.swing.JPanel painelProduto;
    private javax.swing.JScrollPane scrTabela;
    private javax.swing.JTable tabelaProdutos;
    private javax.swing.JTextField txtId;
    private javax.swing.JTextField txtPesquisar;
    private javax.swing.JTextField txtPreco;
    private javax.swing.JTextField txtProduto;
    // End of variables declaration//GEN-END:variables
}
